package tpcomp2010.estructura;

/**
 * Clase que representa un enlace entre dos nodos de un Automata.
 * Se tiene un nodo origen, un nodo destino, una etiqueta que representa
 * el simbolo del enlace y un simbolo que indica si la etiqueta representa
 * vacio (ɛ)
 *
 */

public class Arista implements Comparable<Arista> {
    
    private Nodo nodoOrigen;
    private Nodo nodoDestino;
    private String etiqueta;
    private boolean vacio;

    /** Constructor de una Arista a partir de un nodo origen, un nodo destino
     *  y un simbolo que lo representa.
     */
    public Arista(Nodo origen, Nodo destino, String label) {
        this.nodoOrigen = origen;
        this.nodoDestino = destino;
        this.etiqueta = label;
        
        if (label.compareTo(Constantes.getSimboloVacio())==0) {
            this.vacio = true;
        } else {
            this.vacio = false;
        }
    }

    public Nodo getOrigen() {
        return nodoOrigen;
    }
  
    public void setOrigen(Nodo origen) {
        this.nodoOrigen = origen;
    }

    public Nodo getNodoDestino() {
        return nodoDestino;
    }

    public void setNodoDestino(Nodo destino) {
        this.nodoDestino = destino;
    }


    public String getEtiqueta() {
        return this.etiqueta;
    }
    
    public boolean isVacio() {
        return vacio;
    }

    
    public int compareTo(Arista e) {        
        Nodo nodoOrigen;
        Nodo nodoDestino;
        String simbolo;
        
        nodoOrigen = e.getOrigen();
        nodoDestino = e.getNodoDestino();
        simbolo = e.getEtiqueta();
        
        if (nodoOrigen == this.getOrigen()
                && nodoDestino == this.getNodoDestino()
                && simbolo.equals(this.getEtiqueta())
                ) {
            return 0;
        } else {
            return -1;
        }
    }
    
    @Override
    public String toString(){
        return getEtiqueta();
    }
}
